Sistema de Nombrado en Java (JNDI) [Parte I]

Para componer nombres, normalmente usamos m�todos del interface Name.

La secci�n Nombres Mixtos explic� c�mo a�adir componentes a un nombre mixto y la secci�n Nombres Compuestos explic� c�mo a�adir componentes a un nombre compuesto.

Estos m�todos son �tiles cuando conocemos que estamos tratando con nombres mixtos o nombres compuestos. Pero �qu� pasa si tenermos un nombre mixto y necesitamos a�adir un componente? �Usar�amos la s�ntaxis de nombres mixtos o la nombres compuestos? Y si es compuesto, �qu� s�ntaxis de nombre compuesto? Los desarrolladores que escriben aplicaciones como navegadores de espacios de nombres afrontan frecuentemente esta cuesti�n. Puede ser d�ficil responder sin mucho conocimiento sobre el contexto al que se uni� el nombre y como fue resuelto.

Por ejemplo, supongamos que el nombe "cn=homedir,cn=Jon Ruiz,ou=People" est� unido a un objeto en un sistema de nombres diferentes -- especificamente, un contexto de sistema de ficheros. Para a�adir un componente de nombre de fichero, usamos la s�ntaxis de nombres mixtos. Esto es porque est�mos atravesando desde un espacio de nombres LDAP a un espacio de nombres de fichero.

cn=homedir,cn=Jon Ruiz,ou=People/tutorial

Cuando ya hemos a�adido otro componente de nombre de fichero al resultado, deber�amos usar la s�ntaxis de nombre de fichero. Por ejemplo, en Windows, a�adir el componente "report.txt" resulta en el nombre.

cn=homedir,cn=Jon Ruiz,ou=People/tutorial\report.txt

Para a�adir un componente LDAP al nombre "cn=Jon Ruiz, ou=People" usar�amos la s�ntaxis de nombre LDAP.

cn=homedir,cn=Jon Ruiz,ou=People

El los tres ejemplos, hemos usado una sintaxis de nombre diferente. Las reglas de c�ando usar cada una de ellas se hacen dificiles de imaginar, as� como de programar.

Para ayudar en esta tarea, el JNDI proporciona Context.composeName() para componer nombres din�micamente dependiendo de los l�mites del espacio de nombres federado. Le damos a este m�todo dos argumentos: el nombre que queremos a�adir y el nombre de su contexto (en relaci�n a uno de sus contextos ancestros). Se necesita suministrar este �ltimo porque, en general, un contexto no conoce su nombre, especialmente su nombre en relaci�n a otro contexto a trav�s del que podr�amos haber resuelto para obtenerlo.

La implementaci�n de este m�todo est� suministrada por el proveedor de servicios. Esto pone la pelota de imaginarse los l�mites del espacio de nombres y de que s�ntaxis usar en el tejado del proveedor de servicios y no en el del desarrollador de la aplicaci�n.

Aqu� tenemos un ejemplo que realiza las composiciones descritas aqu�.

// Create the initial context
Context ctx = new InitialContext(env);

// Compose a name within the LDAP namespace
Context ldapCtx = (Context)ctx.lookup("cn=Jon Ruiz,ou=people");
String ldapName = ldapCtx.composeName("cn=homedir", "cn=Jon Ruiz,ou=people");
System.out.println(ldapName);

// Compose a name when it crosses into the next naming system
Context homedirCtx = (Context)ctx.lookup(ldapName);
String compositeName = homedirCtx.composeName("tutorial", ldapName);
System.out.println(compositeName);

// Compose a name within the File namespace
Context fileCtx = (Context)ctx.lookup(compositeName);
String fileName = fileCtx.composeName("report.txt", compositeName);
System.out.println(fileName);

Los nombres de las variable usadas aqu� son s�lo para prop�sitos ilustrativos. La aplicaci�n no necesita conocer si est� interactuando con un contexto LDAP, un contexto del sistema de ficheros, o con un contexto que conecta los dos.

Nota:

La versi�n Beta v1.2 del proveedor de servicios del sistema de ficheros no implementa apropiadamente composeName(). Si ejecutamos este ejemplo en la plataforma Windows, la �ltima composici�n usa un caracter de barra inclinada ("/") en lugar de la barra inclinada invertida.

Este m�todo tambi�n tiene una forma sobrecargada que acepta argumentos Name en lugar de java.lang.String. Si estamos usando la forma Name, debemos asegurarnos de que los dos argumentos son del mismo tipo. Por ejemplo, no mezclar un CompositeName con un CompoundName.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO